<?php namespace Cms\Model;

use Hdphp\Model\Model;

class Field extends Model{

	//数据表
	protected $table = "field";

	//自动验证
	protected $validate=array(
		//字段名: 表单字段名
		//验证方法: 函数或模型方法
		//验证条件: 1有字段时验证(默认)	2值不为空时验证  	3必须验证 
		//验证时间: 1 插入时验证		2更新时空时验证 	3全部情况验证 (默认)
		// array('字段名','验证方法','提示信息',验证条件,验证时间),
		array('field_type','required','字段类型不能为空'),
		array('title','required','标题不能为空'),
		array('field_name','required','字段名不能为空'),
		array('mid','required','模型mid不能为空'),
		);

	//自动完成
	protected $auto=array(
		//字段名: 表单字段名
		//处理方法: 函数或模型方法
		//方法类型: string(字符串 默认)  function(函数)  method(模型方法)
		//验证条件: 1有字段时处理(默认)	2值不为空时 3必须处理
		//处理时间: 1 插入时  2更新时 3全部情况 (默认)
		//array('字段名','处理方法','方法类型',处理时间),
		array('table_name','getTableNameFromTableType','method',1,1),
		array('set','serialize','function',3,3),
		);

	//根据表类型获取表名
	protected function getTableNameFromTableType()
	{
		$table = Db::table('model')->where('mid',$_POST['mid'])->pluck('table_name');
		return $_POST['table_type']==1?$table:$table.'_data';
	}
	//时间操作
	protected $timestamps=false;

	//允许插入的字段
	protected $insertFields=array();

	//允许更新的字段
	protected $updateFields=array();

	public function _after_add()
	{
		$this->updateFieldCache();
	}

	public function _after_save()
	{
		$this->updateFieldCache();
	}

	public function _after_delete()
	{
		$this->updateFieldCache();
	}

	public function updateFieldCache()
	{
		$mid = Q('mid',0,'intval');

		$fields = Db::table('field')->where('mid',$mid)->get();
		$data=array();
		foreach((array) $fields as $k=>$field)
		{
			$field['set']=unserialize($field['set']);
			$data[$field['field_name']]=$field;
		}
		F($mid,$data,'storage/field');
	}
}